Today's computer systems are seeing an ever-increasing usage of virtualization technology in a variety of applications—whether in large data centers, or in personal computing. Virtualization supports such configurations as running multiple operating systems on a single computer system, maximizing the utilization of available hardware resources. For example, users of personal computers can utilize multiple virtual machines for simultaneous execution of various applications in different operating systems on their single machines. More often, virtualization is found on large-capacity servers, such as those when providing web hosting services.
The operation of virtual machines generally requires the use of a hypervisor, which coordinates the execution of the virtual machines, acting as a manager or dispatcher of virtual machines. Commonly, a hypervisor is also referred to as a virtual machine monitor (VMM).
If a computer system has multiple hypervisors, it becomes necessary to coordinate their operation properly. Joint operation of virtual machine hypervisors is typically provided by their design: when a hypervisor takes control of the computing platform, the processor state (i.e., protection ring) changes temporarily and, after completion of the hypervisor's actions, the processor is returned to its initial state. For example, in a Windows operating system, if several virtual machines from different manufacturers are operated simultaneously, then the scheduler will allocate time for the execution of the hypervisors in the same way as for the usual threads in the operating system (e.g., taking into account the priority of the various threads). The hypervisor code itself completes its execution correctly upon expiry of a certain time quantum; however, it should be noted that this time quantum does not necessarily coincide with a time quantum that was allocated by the OS's scheduler.
In systems where multiple hypervisors are to be used simultaneously, conventional multitasking techniques may not function efficiently and, in the worst case, they may not even function effectively. These problems are further exacerbated when, among the multiple hypervisors, there is a hypervisor that is executed at a higher privilege level than another hypervisor. For instance, in cases where a persistent hypervisor is to be used to execute a critically-important virtual machine, along-side one or more non-persistent hypervisors, conventional multitasking techniques have had difficulty ensuring proper persistent operation for the persistent hypervisor. Another problem is that other conventional hypervisors may not be aware of the presence of the persistent hypervisor and may crash the operating system while trying to preempt the execution on the processor in hypervisor mode. A solution is therefore needed to facilitate effective and efficient simultaneous execution of multiple hypervisors.